package entity;

import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import db.DBDataSource;
import db.Factor;

public class Youxiji {
	// 属性

	private PlayerEntity2[] pl;
	private ScoreEntity2[] se;

	/**
	 * 玩游戏
	 */
	public void doplay() {
		int v = chushihua();
		// 根据玩家事先定好的游戏规则
		print1();
		if (v == 1) {
			panding1();
		} else {
			panding2();
		}
	}

	/**
	 * 初始化玩家信息
	 */
	public int chushihua() {
		System.out.println("押1000以下是平民，1000以上是贵宾！");
		System.out.println("如果比谁大，贵宾可以在筛子点数上加1，但是最高不能超过18！");
		System.out.println("如果比谁小，贵宾可以在筛子点数上减1，但是最小不能低于3！");
		Scanner input = new Scanner(System.in);
		System.out.println("怎么玩？-------1.比谁大！2比谁小！");
		int v = input.nextInt();
		System.out.println("几个人玩这局游戏:");
		int i = input.nextInt();
		pl = new PlayerEntity2[i];
		se = new ScoreEntity2[i];
		for (int a = 0; a < i; a++) {
			ScoreEntity2 s = new ScoreEntity2();
			System.out.println("第" + a + "位玩家，你押多少？");
			int j = input.nextInt();
			if (j >= 1000) {
				PlayerEntity2 p = new Guibin();
				System.out.println("请输入姓名：");
				p.setPlName(input.next());
				System.out.println("请输入性别：");
				p.setPlsex(input.next());
				System.out.println("请输入游戏ID：");
				System.out.println("注意：游戏ID不能与别的玩家相同！");
				int t = input.nextInt();
				p.setPlyouxi_id(t);
				s.setPlyouxi_id(t);
				s.setScore(p.doStart(v));
				pl[a] = p;
				se[a] = s;
				String strSQL = "SELECT  plyouxi_id FROM Player2 where  plyouxi_id=?";
				// 返回的是查到信息的条数,查到的话返回条数，查不到就返回0
				int l = Factor.getDBDriverInstance().update(strSQL, new Object[] { t });
				if (l < 1) {
					String strSQL2 = "insert into player2 (PlName,Plsex,Plyouxi_id) values (?,?,?) ";
					int l2 = Factor.getDBDriverInstance().update(strSQL2,
							new Object[] { p.getPlName(), p.getPlsex(), p.getPlyouxi_id() });
					System.out.println(l2 > 0 ? "player2数据增加成功" : "playe2r数据增加失败");

					String strSQL3 = "insert into score2 (Plyouxi_id,score,pltime) values (?,?,sysdate) ";
					int l3 = Factor.getDBDriverInstance().update(strSQL3,
							new Object[] { p.getPlyouxi_id(), s.getPlyouxi_id() });
					System.out.println(l3 > 0 ? "source2数据增加成功" : "source2数据增加失败");
				} else {
					String strSQL3 = "insert into score2 (Plyouxi_id,score,pltime) values (?,?,sysdate) ";
					int l3 = Factor.getDBDriverInstance().update(strSQL3,
							new Object[] { p.getPlyouxi_id(), s.getPlyouxi_id() });
					System.out.println(l3 > 0 ? "source2数据增加成功" : "source2数据增加失败");
				}
			} else {
				PlayerEntity2 p = new Pingmin();
				System.out.println("请输入姓名：");
				p.setPlName(input.next());
				System.out.println("请输入性别：");
				p.setPlsex(input.next());
				System.out.println("请输入游戏ID：");
				System.out.println("注意：游戏ID不能与别的玩家相同！");
				int t = input.nextInt();
				p.setPlyouxi_id(t);
				s.setPlyouxi_id(t);
				s.setScore(p.doStart(v));
				pl[a] = p;
				se[a] = s;
				String strSQL = "SELECT  plyouxi_id FROM Player2 where  plyouxi_id=?";
				// 返回的是查到信息的条数,查到的话返回条数，查不到就返回0
				int l = Factor.getDBDriverInstance().update(strSQL, new Object[] { t });
				if (l < 1) {
					// 将信息插入player2表中
					String strSQL2 = "insert into player2(PlName,Plsex,Plyouxi_id) values (?,?,?) ";
					int l2 = Factor.getDBDriverInstance().update(strSQL2,
							new Object[] { p.getPlName(), p.getPlsex(), p.getPlyouxi_id() });
					System.out.println(l2 > 0 ? "player2数据增加成功" : "playe2r数据增加失败");
					// 将信息插入score2表中
					String strSQL3 = "insert into score2 (Plyouxi_id,score,pltime) values (?,?,sysdate) ";
					int l3 = Factor.getDBDriverInstance().update(strSQL3,
							new Object[] { p.getPlyouxi_id(), s.getPlyouxi_id() });
					System.out.println(l3 > 0 ? "source2数据增加成功" : "source2数据增加失败");
				} else {
					// player2表中已经有了这个游戏ID，为了保证游戏ID在玩家表中的主键性，所以不再将信息放入player表中
					// 将信息插入score2表中
					String strSQL3 = "insert into score2 (Plyouxi_id,score,pltime) values (?,?,sysdate) ";
					int l3 = Factor.getDBDriverInstance().update(strSQL3,
							new Object[] { p.getPlyouxi_id(), s.getPlyouxi_id() });
					System.out.println(l3 > 0 ? "source2数据增加成功" : "source2数据增加失败");
				}

			}
		}
		// 返回玩家事先规定的游戏规则
		return v;
	}

	/**
	 * 打印玩家信息
	 */
	public void print1() {
		for (int i = 0; i < pl.length; i++) {
			System.out.println("姓名为：" + pl[i].getPlName() + "  性别为：" + pl[i].getPlsex() + "  游戏ID为："
					+ pl[i].getPlyouxi_id() + "  点数为：" + se[i].getScore());
		}
	}

	/**
	 * 谁大谁赢
	 */
	public void panding1() {
		int temp = 0;
		// 寻找最大值
		for (int i = 0; i < se.length; i++) {
			if (temp < se[i].getScore()) {
				temp = se[i].getScore();
			}
		}
		// 凡是和最大值相等都赢了
		for (int i = 0; i < se.length; i++) {
			if (temp == se[i].getScore()) {
				System.out.println(pl[i].getPlName() + "赢了");
			}
		}
	}

	/**
	 * 谁小谁赢
	 */
	public void panding2() {
		int temp = 19;
		// 寻找最小值
		for (int i = 0; i < se.length; i++) {
			if (temp > se[i].getScore()) {
				temp = se[i].getScore();
			}
		}
		// 凡是和最小值相等都赢了
		for (int i = 0; i < se.length; i++) {
			if (temp == se[i].getScore()) {
				System.out.println(pl[i].getPlName() + "赢了");
			}
		}
	}

	public void doquerP() {
		System.out.println("请输入你要查询的sql语句：");
		Scanner input = new Scanner(System.in);
		String str = input.nextLine();
		List l = (List) Factor.getDBDriverInstance().query(str, new BeanListHandler(PlayerEntity2.class));
		printList(l);
	}

	public void doquersc() {
		System.out.println("请输入你要查询的sql语句：");
		Scanner input = new Scanner(System.in);
		String str = input.nextLine();
		List l = (List) Factor.getDBDriverInstance().query(str, new BeanListHandler(ScoreEntity2.class));
		printList(l);
	}

	/**
	 * 使用iterator迭代器遍历list集合
	 * 
	 * @param lst
	 */
	public static void printList(List lst) {
		System.out.println("list集合存储的二维表格内容：");
		for (int i = 0; i < lst.size(); i++) {
			System.out.println(lst.get(i).toString());

		}
	}
}